{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 05 CNN Forward Method - PyTorch Deep Learning Implementation\n",
    "## Review"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `forward()` method is the **actual network transformation**. <br>The forward method is the mapping that maps an **input tensor** to a prediction **output tensor**. Let's see how this is done.\n",
    "\n",
    "This means that the forward method implementation will use **all of the layers** we defined inside the constructor. In this way, the **forward method** explicitly defines the **network's transformation**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Network(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.conv1 = nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5)\n",
    "        self.conv2 = nn.Conv2d(in_channels=6,out_channels=12,kernel_size = 5)\n",
    "        \n",
    "        self.fc1 = nn.Linear(in_features = 12*4*4,out_features = 120)\n",
    "        self.fc2 = nn.Linear(in_features = 120,out_features = 60)\n",
    "        self.out = nn.Linear(in_features = 60,out_features = 10)\n",
    "        \n",
    "    def forward(self,t):\n",
    "        # implement the forward pass\n",
    "        return t"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Input Layer 1\n",
    "\n",
    "The **input layer** of any neural network is determined by the **input data**. \n",
    "\n",
    "```python\n",
    "def forward(self,t):\n",
    "    #(1) input ;ayer\n",
    "    t = t\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Hidden Convolutional Layers: Layers 2 And 3\n",
    "\n",
    "To preform the convolution operation, we pass the tensor to the forward method of the first convolutional layer, `self.conv1`. We've learned how all PyTorch neural network modules have `forward()` methods, and when we call the `forward()` method of a `nn.Module`, there is a special way that we make the call.\n",
    "\n",
    "When want to call the `forward()` method of a `nn.Module` instance, we call the actual instance instead of calling the `forward()` method directly.\n",
    "\n",
    "Instead of doing this `self.conv1.forward(tensor)`, we do this `self.conv1(tensor)`.\n",
    "\n",
    "```python\n",
    "# (2) hidden conv layer\n",
    "t = self.conv1(t)\n",
    "t = F.relu(t)\n",
    "t = F.max_pool2d(t, kernel_size=2, stride=2)\n",
    "\n",
    "# (3) hidden conv layer\n",
    "t = self.conv2(t)\n",
    "t = F.relu(t)\n",
    "t = F.max_pool2d(t, kernel_size=2, stride=2)\n",
    "```\n",
    "\n",
    "As we can see here, our input tensor is transformed as we move through the convolutional layers. The first convolutional layer has a convolutional operation, followed by a **relu activation** operation whose output is then passed to a max pooling operation with `kernel_size=2` and `stride=2`.(其中kernel size就是filter的大小)\n",
    "\n",
    "The output tensor `t` of the first convolutional layer is then passed to the next convolutional layer, which is identical except for the fact that we call `self.conv2()` instead of `self.conv1()`.\n",
    "\n",
    "Each of these layers is comprised of a collection of weights (data) and a collection operations (code). The weights are encapsulated inside the `nn.Conv2d()` class instance. The `relu()` and the `max_pool2d()` calls are just **pure operations**. Neither of these have weights, and this is why we call them directly from the `nn.functional` API.\n",
    "\n",
    "Sometimes we may see `pooling operations` referred to as pooling layers. Sometimes we may even hear activation operations called activation layers.\n",
    "\n",
    "**However**, what makes a layer **distinct** from an operation is that layers have **weights**. Since `pooling` operations and `activation` functions **do not have weights**, we will refer to them as **operations** and view them as being added to the collection of layer operations.\n",
    "\n",
    "**确定一个操作能不能叫做layer就看他有没有weights，不过也别被这些术语搞糊涂了，我们就是通过一系列方法的组合来实现这个`forward()`**\n",
    "\n",
    "Don't let these terms confuse the fact that the whole network is simply a composition of functions, and what we are doing now is defining this composition inside our `forward()` method."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Hidden Linear Layers: Layers 4 And 5\n",
    "Before we pass our input to the first hidden linear layer, we must `reshape()` or `flatten` our tensor. This will be the case any time we are passing output from a convolutional layer as input to a linear layer.\n",
    "\n",
    "Since the forth layer is the first linear layer, we will include our reshaping operation as a part of the forth layer.\n",
    "\n",
    "```python\n",
    "# (4) hidden linear layer\n",
    "t = t.reshape(-1, 12 * 4 * 4)\n",
    "t = self.fc1(t)\n",
    "t = F.relu(t)\n",
    "\n",
    "# (5) hidden linear layer\n",
    "t = self.fc2(t)\n",
    "t = F.relu(t)\n",
    "```\n",
    "\n",
    "number `12` in the reshaping operation is determined by the number of output channels coming from the previous convolutional layer(`out_channels=12`).\n",
    "\n",
    "The `4 * 4` is actually the height and width of each of the 12 output channels.\n",
    "\n",
    "The height and width dimensions have been reduced from `28 x 28` to `4 x 4` by the convolution and pooling operations.\n",
    "\n",
    "After the tensor is reshaped, we pass the `flattened` tensor to the linear layer and pass this result to the `relu() activation function`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Output Layer 6\n",
    "\n",
    "The sixth and last layer of our network is a linear layer we call the **output layer**. When we pass our tensor to the output layer, the result will be the **prediction tensor**. Since our data has ten prediction classes, we know our output tensor will have ten elements.\n",
    "\n",
    "```python\n",
    "# (6) output layer\n",
    "t = self.out(t)\n",
    "#t = F.softmax(t, dim=1)\n",
    "```\n",
    "Inside the network we usually use `relu()` as our `non-linear activation function`, but for the output layer, whenever we have a single category that we are trying to predict, we use `softmax()`. The `softmax function` returns a positive probability for each of the prediction classes, and the probabilities sum to `1`.\n",
    "\n",
    "**However**, in our case, we won't use `softmax()` because the loss function that we'll use, `F.cross_entropy()`, implicitly performs the `softmax()` operation on its input, so we'll just return the result of the last linear transformation.\n",
    "\n",
    "The implication of this is that our network will be trained using the softmax operation but will not need to compute the additional operation when the network is used for inference after the training process is complete."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Network(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.conv1 = nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5)\n",
    "        self.conv2 = nn.Conv2d(in_channels=6,out_channels=12,kernel_size = 5)\n",
    "        \n",
    "        self.fc1 = nn.Linear(in_features = 12*4*4,out_features = 120)\n",
    "        self.fc2 = nn.Linear(in_features = 120,out_features = 60)\n",
    "        self.out = nn.Linear(in_features = 60,out_features = 10)\n",
    "        \n",
    "    def forward(self,t):\n",
    "        # (1) input layer\n",
    "        t = t\n",
    "\n",
    "        # (2) hidden conv layer\n",
    "        t = self.conv1(t)\n",
    "        t = F.relu(t)\n",
    "        t = F.max_pool2d(t, kernel_size=2, stride=2)\n",
    "\n",
    "        # (3) hidden conv layer\n",
    "        t = self.conv2(t)\n",
    "        t = F.relu(t)\n",
    "        t = F.max_pool2d(t, kernel_size=2, stride=2)\n",
    "\n",
    "        # (4) hidden linear layer\n",
    "        t = t.reshape(-1, 12 * 4 * 4)\n",
    "        t = self.fc1(t)\n",
    "        t = F.relu(t)\n",
    "\n",
    "        # (5) hidden linear layer\n",
    "        t = self.fc2(t)\n",
    "        t = F.relu(t)\n",
    "\n",
    "        # (6) output layer\n",
    "        t = self.out(t)\n",
    "        #t = F.softmax(t, dim=1)\n",
    "\n",
    "        return t"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Quiz 05\n",
    "Q1:In neural network programming, the forward method of a network instance explicitly defines the network's ______________<br>\n",
    "A1:transformation\n",
    "\n",
    "Q2:In neural network programming, the forward method of a network instance is the mapping that maps an input tensor to a prediction output tensor.<br>\n",
    "A2:**True**\n",
    "\n",
    "Q3:The input layer of any neural network is determined by the input data. For this reason, we can think of the input layer as the identity transformation. Mathematically, this is the function,$$f(x)=x$$\n",
    "A3:**True**\n",
    "\n",
    "Q4:In neural network programming, all layers that are not the input or output layers are called hidden layers.<br>\n",
    "A4:**True**\n",
    "\n",
    "Q5:In neural network programming, the operations that are defined using _______________ are called layers.<br>\n",
    "A5:weights\n",
    "\n",
    "Q6:In the most general sense, neural networks are mathematical functions. Terms like layers, activation functions, and weights, are just used to help describe the different parts.<br>\n",
    "A6:**True**\n",
    "\n",
    "[Reference](https://deeplizard.com/learn/video/MasG7tZj-hw)\n",
    "\n",
    "---\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 06 CNN Image Prediction With PyTorch - Forward Propagation Explained\n",
    "\n",
    "## What Is Forward Propagation?\n",
    "\n",
    "*Forward propagation* is the process of transforming an input tensor to an output tensor. <br>\n",
    "At its core, a neural network is a function that maps an input tensor to an output tensor, and *forward propagation* is just a special name for the process of **passing an input to the network and receiving the output** from the network.\n",
    "\n",
    "For our network, what this means is simply passing our input tensor to the network and receiving the output tensor. To do this, we pass our sample data to the network's `forward()` method.\n",
    "\n",
    "This is why, the `forward()` method has the name *forward*, the execution of **the `forward()` is the process of forward propagation**.\n",
    "\n",
    "The word *forward*, is pretty *straight forward*. ;)\n",
    "\n",
    "However, the word *propagate* means to move or transmit *through some medium*. In the case of **neural networks**, data propagates through the **layers of the network**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms\n",
    "\n",
    "torch.set_printoptions(linewidth=120)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_set = torchvision.datasets.FashionMNIST(\n",
    "    root = './data/FashionMNIST'\n",
    "    ,train = True\n",
    "    ,download = True\n",
    "    ,transform = transforms.Compose([\n",
    "        transforms.ToTensor()\n",
    "    ])\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Network(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.conv1 = nn.Conv2d(in_channels = 1,out_channels = 6,kernel_size = 5)\n",
    "        self.conv2 = nn.Conv2d(in_channels = 6,out_channels = 12,kernel_size = 5)\n",
    "        \n",
    "        self.fc1 = nn.Linear(in_features = 12*4*4,out_features=120)\n",
    "        self.fc2 = nn.Linear(in_features = 120,out_features=60)\n",
    "        self.out = nn.Linear(in_features = 60,out_features=10)\n",
    "        \n",
    "    def forward(self,t):\n",
    "        t = F.relu(self.conv1(t))\n",
    "        t = F.max_pool2d(t, kernel_size = 2,stride = 2)\n",
    "        \n",
    "        t = F.relu(self.conv2(t))\n",
    "        t = F.max_pool2d(t, kernel_size = 2,stride = 2)\n",
    "        \n",
    "        t = F.relu(self.fc1(t.reshape(-1,12*4*4)))\n",
    "        t = F.relu(self.fc2(t))\n",
    "        t = self.out(t)\n",
    "        \n",
    "        return t"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Predicting With The Network: Forward Pass\n",
    "\n",
    "Before we being, we are going to **turn off PyTorch’s gradient calculation feature**. This will stop PyTorch from automatically building a computation graph as our tensor flows through the network.\n",
    "![pytorch neuron](https://deeplizard.com/images/neural%20network%202%203%202.png)\n",
    "\n",
    "The computation graph keeps track of the network's mapping by tracking each computation that happens. The graph is used during the training process to calculate the derivative (gradient) of the loss function with respect to the network’s weights.\n",
    "\n",
    "**Since we are not training the network yet, we aren’t planning on updating the weights, and so we don’t require gradient calculations. We will turn this back on when training begins.**\n",
    "\n",
    "This process of tracking calculations happens in real-time, as the calculations occur.Turning it off isn’t strictly necessary but having the feature turned off does reduce memory consumption since the graph isn't stored in memory. This code will turn the feature off.\n",
    "```python\n",
    "torch.set_grad_enabled(False) \n",
    "```\n",
    "\n",
    "### Passing A Single Image To The Network\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch.autograd.grad_mode.set_grad_enabled at 0x216a5bc1ca0>"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.set_grad_enabled(False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "network = Network()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we’ll procure a **single** sample from our training set, unpack the image and the label, and verify the image’s shape:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 28, 28])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample = next(iter(train_set))\n",
    "image,label = sample\n",
    "image.shape\n",
    "#The image tensor’s shape indicates that we have a single channel image \n",
    "#that is 28 in height and 28 in width. Cool, this is what we expect."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "label"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, there's a second step we must preform before simply passing this tensor to our network. When we pass a tensor to our network, the network is expecting a **batch**, so even if we want to pass a single image, we still need a batch.\n",
    "\n",
    "This is no problem. We can create **a batch that contains a single image**. All of this will be packaged into a single **four dimensional tensor** that reflects the following dimensions.\n",
    "\n",
    "This requirement of the network **arises from** the fact that the `forward()` method's in the `nn.Conv2d` convolutional layer classes expect their tenors to have **4 dimensions**. This is pretty standard as most neural network implementations deal with batches of input samples rather than single samples.\n",
    "\n",
    "To put our single sample image tensor into a batch with a size of 1, we just need to `unsqueeze()` the tensor to add an additional dimension. [squeeze tutorial](https://deeplizard.com/learn/video/fCVuiW9AFzY)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 1, 28, 28])"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Inserts an additional dimension that represents a batch of size 1\n",
    "image.unsqueeze(0).shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = network(image.unsqueeze(0)) \n",
    "# image shape needs to be (batch_size × in_channels × H × W)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 0.0207, -0.0841, -0.0833,  0.1248, -0.0734, -0.0905, -0.0102, -0.0013,  0.0937, -0.0687]])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And we did it! We've used our forward method to get a prediction from the network. The network has returned a prediction tensor that contains a prediction value for each of the ten categories of clothing."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 10])"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([3])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " pred.argmax(dim=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "label"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For each input in the batch, and for each prediction class, we have a prediction value. If we wanted these values to be probabilities, we could just the `softmax()` function from the `nn.functional` package."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[0.1036, 0.0933, 0.0933, 0.1149, 0.0943, 0.0927, 0.1004, 0.1013, 0.1114, 0.0947]])"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F.softmax(pred, dim=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(1.)"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "F.softmax(pred, dim=1).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([3])\n",
      "9\n"
     ]
    }
   ],
   "source": [
    "print( pred.argmax(dim=1))\n",
    "print(label)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The label for the first image in our training set is `9`, and using the `argmax()` function we can see that the highest value in our prediction tensor occurred at the class represented by index `3`.\n",
    "\n",
    "The prediction in this case is **incorrect**, **which is what we expect** because the weights in the network were generated randomly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 0.0207, -0.0841, -0.0833,  0.1248, -0.0734, -0.0905, -0.0102, -0.0013,  0.0937, -0.0687]])"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Network Weights Are Randomly Generated\n",
    "There are a couple of important things we need to point out about these results. Most of the probabilities came in close to `10%`, and this `makes sense` because our network is guessing and we have ten prediction classes coming from a `balanced dataset`.\n",
    "\n",
    "Another implication of the randomly generated weights is that **each time we create a new instance of our network**, the **weights** within the network will be **different**. This means that the predictions we get will be different if we create different networks. Keep this in mind. Your predictions will be different from what we see here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "net1 = Network()\n",
    "net2 = Network()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 0.0299,  0.0675, -0.0123,  0.0595,  0.0621,  0.0469, -0.1198,  0.0559,  0.1360,  0.1458]])"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "net1(image.unsqueeze(0))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 0.0902,  0.0108,  0.0641,  0.0207, -0.0602,  0.0682, -0.0044, -0.0218,  0.0343,  0.0474]])"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "net2(image.unsqueeze(0))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Quiz 06\n",
    "Q1:_____________ is the process of transforming an input tensor to an output tensor.<br>A1:Forward propagation\n",
    "\n",
    "Q2:The concept of forward propagation is used to indicate that the input tensor data is transmitted through the network in the backward direction.<br>\n",
    "A2:**False**\n",
    "\n",
    "Q3:In neural network programming, the computational graph keeps track of the network's mapping by tracking each computation that happens. The graph is used during the training process to calculate the derivative (gradient) of the loss function with respect to the network’s ______________<br>\n",
    "A3:weights\n",
    "\n",
    "Q4:Suppose we have a balanced dataset with ten different classes. Choose an image from this dataset and pass the image to a CNN that has randomly initialized weights. In this situation, what is the approximate prediction probability should we expect to see across all the prediction classes?<br>\n",
    "A4:10%\n",
    "\n",
    "Q5:Suppose we have the pred tensor below. What will be the output of the sum() of the softmax().\n",
    "```python\n",
    "> pred\n",
    "tensor([[0.0991, 0.0916, 0.0907, 0.0949, 0.1013, 0.0922, 0.0990, 0.1130, 0.1107, 0.1074]])\n",
    "\n",
    "> F.softmax(pred, dim=1).sum()\n",
    "```\n",
    "A5:tensor(1.)\n",
    "\n",
    "[Reference](https://deeplizard.com/learn/video/6vweQjouLEE)\n",
    "\n",
    "---\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 07 Neural Network Batch Processing - Pass Image Batch To PyTorch CNN\n",
    "\n",
    "## Neural Network Batch Processing With PyTorch\n",
    "\n",
    "### Passing A Batch Of Images To The Network\n",
    "We need the following:\n",
    "* Our imports.\n",
    "* Our training set.\n",
    "* Our Network class definition.\n",
    "* To disable gradient tracking. (optional)\n",
    "* A Network class instance."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms\n",
    "\n",
    "torch.set_printoptions(linewidth=120)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_set = torchvision.datasets.FashionMNIST(\n",
    "    root = './data/FashionMNIST'\n",
    "    ,train = True\n",
    "    ,download = True\n",
    "    ,transform = transforms.Compose([\n",
    "        transforms.ToTensor()\n",
    "    ])\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Network(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.conv1 = nn.Conv2d(in_channels=1,out_channels=6,kernel_size=5)\n",
    "        self.conv2 = nn.Conv2d(in_channels=6,out_channels=12,kernel_size = 5)\n",
    "        \n",
    "        self.fc1 = nn.Linear(in_features = 12*4*4,out_features = 120)\n",
    "        self.fc2 = nn.Linear(in_features = 120,out_features = 60)\n",
    "        self.out = nn.Linear(in_features = 60,out_features = 10)\n",
    "        \n",
    "    def forward(self,t):\n",
    "        # (1) input layer\n",
    "        t = t\n",
    "\n",
    "        # (2) hidden conv layer\n",
    "        t = self.conv1(t)\n",
    "        t = F.relu(t)\n",
    "        t = F.max_pool2d(t, kernel_size=2, stride=2)\n",
    "\n",
    "        # (3) hidden conv layer\n",
    "        t = self.conv2(t)\n",
    "        t = F.relu(t)\n",
    "        t = F.max_pool2d(t, kernel_size=2, stride=2)\n",
    "\n",
    "        # (4) hidden linear layer\n",
    "        t = t.reshape(-1, 12 * 4 * 4)\n",
    "        t = self.fc1(t)\n",
    "        t = F.relu(t)\n",
    "\n",
    "        # (5) hidden linear layer\n",
    "        t = self.fc2(t)\n",
    "        t = F.relu(t)\n",
    "\n",
    "        # (6) output layer\n",
    "        t = self.out(t)\n",
    "        #t = F.softmax(t, dim=1)\n",
    "\n",
    "        return t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<torch.autograd.grad_mode.set_grad_enabled at 0x216a5bc18b0>"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.set_grad_enabled(False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "network = Network()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, we’ll use our training set to create a new `DataLoader` instance, and we’ll set our `batch_size=10`, so the outputs will be more manageable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_loader = torch.utils.data.DataLoader(\n",
    "    train_set,batch_size = 10\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch = next(iter(data_loader))\n",
    "images,labels = batch"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This gives us **two tensors**, a tensor of **images** and a tensor of **corresponding labels**.\n",
    "\n",
    "In the last episode, when we pulled a single image from our training set, we had to `unsqueeze()` the tensor to add another dimension that would effectively transform the singleton image into a batch with a size of one. Now that we are working with the *data loader*, we are dealing with batches by default, so there is no further processing needed.\n",
    "\n",
    "The data loader returns a batch of images that are packaged into a single tensor with a shape that reflects the following axes.\n",
    "\n",
    "`(batch size, input channels, height, width)`\n",
    "\n",
    "This means tensor's shape is in **good shape**, and there's **no need to unsqueeze it**. ;)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([10, 1, 28, 28])"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "images.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([10])"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The first axis of the image tensor tells us that we have a **batch of ten images**. These ten images have **a single color channel** with a **height** and **width** of twenty-eight.\n",
    "\n",
    "The labels tensor has a single axis with a shape of ten, which corresponds to the **ten images** inside our batch. **One label for each image**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "preds = network(images)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([10, 10])"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "preds.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 1.6467e-02, -3.2971e-02, -1.4058e-01, -1.2443e-01,  9.6093e-02, -1.4053e-01, -4.4303e-02, -9.8937e-03,\n",
       "         -4.1751e-02, -1.5865e-03],\n",
       "        [ 1.1554e-02, -3.5275e-02, -1.4306e-01, -1.2657e-01,  9.1447e-02, -1.5218e-01, -3.6254e-02, -1.4780e-02,\n",
       "         -3.2344e-02, -6.0051e-03],\n",
       "        [ 2.5395e-02, -5.6169e-02, -1.3118e-01, -1.3064e-01,  1.0796e-01, -1.2940e-01, -4.1606e-02, -2.5502e-02,\n",
       "         -4.0450e-02,  3.5781e-03],\n",
       "        [ 1.9997e-02, -4.8922e-02, -1.3441e-01, -1.2610e-01,  1.0554e-01, -1.3486e-01, -4.2117e-02, -2.1434e-02,\n",
       "         -3.6143e-02,  7.5589e-04],\n",
       "        [ 9.6969e-04, -4.9612e-02, -1.3271e-01, -1.2524e-01,  1.0999e-01, -1.4848e-01, -4.4680e-02, -1.5122e-02,\n",
       "         -3.4455e-02,  3.3246e-03],\n",
       "        [ 2.5426e-02, -3.6826e-02, -1.3773e-01, -1.2568e-01,  9.1324e-02, -1.4248e-01, -4.1219e-02, -1.4956e-02,\n",
       "         -3.4798e-02, -1.1648e-02],\n",
       "        [ 1.8192e-02, -3.0211e-02, -1.4076e-01, -1.2476e-01,  9.3960e-02, -1.2872e-01, -4.6744e-02, -1.7168e-02,\n",
       "         -3.7452e-02,  1.4616e-04],\n",
       "        [ 1.4099e-02, -2.6243e-02, -1.4466e-01, -1.1376e-01,  9.1605e-02, -1.4882e-01, -4.2618e-02, -8.7141e-03,\n",
       "         -3.0565e-02, -1.3770e-02],\n",
       "        [ 3.0475e-02, -4.5589e-02, -1.3294e-01, -1.2824e-01,  1.0284e-01, -1.2926e-01, -4.4715e-02, -1.6938e-02,\n",
       "         -4.4489e-02, -1.3020e-04],\n",
       "        [ 3.0999e-02, -3.5737e-02, -1.4048e-01, -1.2686e-01,  9.4163e-02, -1.3359e-01, -4.3089e-02, -1.7906e-02,\n",
       "         -3.5539e-02, -9.2995e-03]])"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "preds"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The prediction tensor has a shape of `10 by 10`, which gives us two axes that each have a length of ten. This reflects the fact that we have ten images and for each of these ten images we have ten prediction classes.\n",
    "\n",
    "`(batch size, number of prediction classes)`\n",
    "\n",
    "The elements of the **first dimension** are arrays of length ten. Each of these array elements contain the **ten predictions** for each category for the corresponding image.\n",
    "\n",
    "The elements of the **second dimension** are **numbers**. Each number is the assigned value of the specific output class. The output classes are encoded by the indexes, so each index represents a specific output class. This mapping is given by this table."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Using Argmax: Prediction Vs Label\n",
    "\n",
    "To check the predictions against the labels, we use the `argmax()` function to figure out which index contains the **highest prediction value**. Once we know which index has the highest prediction value, we can **compare the index with the label** to see if there is a **match**.\n",
    "\n",
    "To do this, we call the `argmax()` function on the prediction tensor, and we specify **second dimension**.\n",
    "\n",
    "The **second dimension** is the **last dimension** of our prediction tensor. Remember from all of our work on tensors, the last dimension of a tensor always contains **numbers** while every other dimension contains other **smaller tensor**.\n",
    "\n",
    "一个tensor的最后一维就是一个具体数字，再往高维走就是一个tensor\n",
    "\n",
    "In our prediction tensor's case, we have ten groups of numbers. What the `argmax()` function is doing is looking inside each of these ten groups, finding the max value, and outputting its index.\n",
    "\n",
    "For each group of ten numbers:\n",
    "* Find max value.\n",
    "* Output index\n",
    "\n",
    "The interpretation of this is that, for each of the images in the batch, we are finding the prediction class that has the **highest value**. This is the category the network is **predicting most strongly**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([4, 4, 4, 4, 4, 4, 4, 4, 4, 4])"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "preds.argmax(dim=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([9, 0, 0, 3, 0, 2, 7, 2, 5, 5])"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "labels"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The result from the `argmax()` function is a tensor of ten prediction categories. Each number is the index where the highest value occurred. We have ten numbers because there were ten images. Once we have this tensor of indices of highest values, we can compare it against the label tensor."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([False, False, False, False, False, False, False, False, False, False])"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "preds.argmax(dim=1).eq(labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor(0)"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "preds.argmax(dim=1).eq(labels).sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To achieve the comparison, we are using the `eq()` function. The `eq()` function computes an element-wise equals operation between the argmax output and the `labels` tensor.\n",
    "\n",
    "This returns `True` if the prediction category in the argmax output matches the label and `False` otherwise.\n",
    "\n",
    "Finally, if we call the `sum()` function on this result, we can reduce the output into a single number of correct predictions inside this scalar valued tensor.\n",
    "\n",
    "We can wrap this last call into a function called `get_num_correct()` that accepts the predictions and the labels, and uses the `item()` method to return the Python number of correct predictions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_num_correct(preds, labels):\n",
    "    return preds.argmax(dim=1).eq(labels).sum().item()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "get_num_correct(preds, labels)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Quiz 07\n",
    "\n",
    "Q1:In many neural network APIs, networks accept batches of images as input.<br>\n",
    "A1:**True**\n",
    "\n",
    "Q2:In neural network programming, when we pull a single image from the training set, we unsqueeze the image tensor to add another dimension so that the tensor is transformed into a ______________<br>\n",
    "A2:batch tensor with one image\n",
    "\n",
    "Q3:Suppose we have a label tensor with a shape of ten. The value of ten in the shape corresponds to the ten images inside the _______________. One label for each image.<br>\n",
    "A3:batch\n",
    "\n",
    "Q4:Suppose the prediction tensor output from a network has a shape of ten by ten. This information tells us that we have a batch of ten images and ten prediction classes in the training set.<br>\n",
    "```python\n",
    "> preds.shape\n",
    "torch.Size([10, 10])\n",
    "```\n",
    "A4:**True**\n",
    "\n",
    "Q5:When we call the argmax() function on a prediction tensor, the argmax() function looks inside each of the ten prediction groups, finds the max value, and outputs the value.<br>\n",
    "```python\n",
    "> preds.argmax(dim=1)\n",
    "tensor([5, 5, 5, 5, 5, 5, 4, 5, 5, 4])\n",
    "```\n",
    "A5:**False**\n",
    "\n",
    "Q6:When we call the `argmax()` function on a prediction tensor, the `argmax()` function looks inside each of the ten prediction groups, finds the max value, and outputs the index location of the max value.<br>\n",
    "A6:**True**\n",
    "\n",
    "[Reference](https://deeplizard.com/learn/video/p1xZ2yWU1eo)\n",
    "\n",
    "---\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 08 CNN Output Size Formula - Bonus Neural Network Debugging Session\n",
    "\n",
    "## CNN Output Size Formula - Tensor Transformations\n",
    "\n",
    "### High-Level Overview Of Our Process  整体回顾做深度学习的过程\n",
    "* Prepare the data\n",
    "* Build the model\n",
    "  * **Understanding forward pass transformations**\n",
    "* Train the model\n",
    "* Analyze the model’s results\n",
    "\n",
    "### Overview Of Our Network\n",
    "The CNN we will use is the one that we have been working with over the last few posts that has **six layers**.\n",
    "1. Input layer\n",
    "2. Hidden conv layer\n",
    "3. Hidden conv layer\n",
    "4. Hidden linear layer\n",
    "5. Hidden linear layer\n",
    "6. Output layer\n",
    "\n",
    "We built this network using PyTorch’s `nn.Module` class, and the `Network` class definition is as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Network(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.conv1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5)\n",
    "        self.conv2 = nn.Conv2d(in_channels=6, out_channels=12, kernel_size=5)\n",
    "\n",
    "        self.fc1 = nn.Linear(in_features=12*4*4, out_features=120)\n",
    "        self.fc2 = nn.Linear(in_features=120, out_features=60)\n",
    "        self.out = nn.Linear(in_features=60, out_features=10)\n",
    "\n",
    "    def forward(self, t):\n",
    "        # (1) input layer\n",
    "        t = t\n",
    "\n",
    "        # (2) hidden conv layer\n",
    "        t = self.conv1(t)\n",
    "        t = F.relu(t)\n",
    "        t = F.max_pool2d(t, kernel_size=2, stride=2)\n",
    "\n",
    "        # (3) hidden conv layer\n",
    "        t = self.conv2(t)\n",
    "        t = F.relu(t)\n",
    "        t = F.max_pool2d(t, kernel_size=2, stride=2)\n",
    "\n",
    "        # (4) hidden linear layer\n",
    "        t = t.reshape(-1, 12 * 4 * 4)\n",
    "        t = self.fc1(t)\n",
    "        t = F.relu(t)\n",
    "\n",
    "        # (5) hidden linear layer\n",
    "        t = self.fc2(t)\n",
    "        t = F.relu(t)\n",
    "\n",
    "        # (6) output layer\n",
    "        t = self.out(t)\n",
    "        #t = F.softmax(t, dim=1)\n",
    "\n",
    "        return t"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Passing A Batch Of Size One (A Single Image)\n",
    "\n",
    "In a previous episode, we saw how we can pass a single image by adding a batch dimension using PyTorch’s `unsqueeze()` method. We’ll pass this tensor to the network again, but this time we will step through the `forward()` method using the *debugger*(可以用VSCode的Debugger). This will allow us to inspect our tensor as transformations are performed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "network = Network()\n",
    "sample = next(iter(train_set))\n",
    "image,label = sample\n",
    "\n",
    "output = network(image.unsqueeze(0))"
   ]
  },
  {
   "attachments": {
    "inputlayer.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### #1 Input Layer\n",
    "When the tensor comes into the input layer, we have:\n",
    "![inputlayer.png](attachment:inputlayer.png)\n",
    "This value in each of these dimensions represent the following values:  \n",
    "**(batch size, color channels, height, width)**   \n",
    "\n",
    "Since the input layer is just the **identity function**, the output shape doesn’t change.The input layer can be regarded as the trivial identity function, **output** of the layer is **equal** to the **input**."
   ]
  },
  {
   "attachments": {
    "convlayer.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### #2 Convolutional Layer (1)\n",
    "When the tensor comes into this layer, we have:\n",
    "![convlayer.png](attachment:convlayer.png)  "
   ]
  },
  {
   "attachments": {
    "afconvlayer.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After the first convolution operation `self.conv1`, we have:\n",
    "![afconvlayer.png](attachment:afconvlayer.png)  \n",
    "The `batch_size` is fixed as we move through the forward pass.  \n",
    "\n",
    "The number of color channels has increased from `1` to `6`. After we move forward beyond the first convolutional layer, we don’t think of the **channels** as **color channels** any longer. We just think of them as **output channels**. The reason we have `6` output channels is due to the number of `out_channels` that we specified when `self.conv1` was created.  \n",
    "`self.conv1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5)`  \n"
   ]
  },
  {
   "attachments": {
    "convshape.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Convolution Operations Use Filters\n",
    "\n",
    "Like we have seen, this number `6` is arbitrary. The **out_channels** parameter instructs the `nn.Conv2d` layer class generate **six filters**, also known as kernels, with shape `5 by 5` with **randomly initialized** values. These filters are used to generate the six output channels.\n",
    "\n",
    "**The `out_channels` parameter determines how many `filters` will be created.**  \n",
    "**其中`kernel_size` 就是filter的大小**\n",
    "\n",
    "The **filters** are **tensors**, and they are used to convolve the input tensor when the tensor is passed to the layer instance, `self.conv1`. The random values inside the filter tensors are the **weights** of the convolutional layer. Remember though, **we don't actually have six distinct tensor**. All six of the **filters are packaged into a single weight tensor** that has a height and width of five. \n",
    "\n",
    "在计算过程中并不是单独生成6个filter的tensor，而是这6个filter会打包成一个大的tensor，其中每个tensor都是5*5的\n",
    "\n",
    "**The filters are the weight tensors.**\n",
    "\n",
    "After the **weight tensors (filters)** are used to convolve the input tensor, the result is the **output channels**.\n",
    "\n",
    "Another name for **output channels** is **feature maps**. The terms here are interchangeable. This is due to the fact that the pattern detection that emerges as the weights are updated represent features like edges and other more sophisticated patterns.\n",
    "\n",
    "The algorithm:\n",
    "1. Color channels are passed in.\n",
    "2. Convolutions are performed using the weight tensor (filters).\n",
    "3. Feature maps are produced and passed forward.\n",
    "\n",
    "Conceptually, we can think of the weight tensors as being distinct. However, what we really have in code is **a single weight tensor** that has an **out_channels (filters) dimension**. We can see this by checking the shape of the weight tensor:\n",
    "![convshape.png](attachment:convshape.png)\n",
    "\n",
    "This tensor’s shape is given by:  \n",
    "**(number of filters, number of input channels, filter height, filter width)**"
   ]
  },
  {
   "attachments": {
    "relulayer.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The `relu()` Activation Function\n",
    "\n",
    "The call to the `relu()` function removes any **negative values** and replaces them with **zeros**. We can verify this by checking the `min()` of the tensor before and after the call.  \n",
    "\n",
    "**Before:**\n",
    "![relulayer.png](attachment:relulayer.png)"
   ]
  },
  {
   "attachments": {
    "af-relulayer.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**After:**\n",
    "![af-relulayer.png](attachment:af-relulayer.png)"
   ]
  },
  {
   "attachments": {
    "relu.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `relu()` function can be expressed mathematically as\n",
    "![relu.png](attachment:relu.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The Max Pooling Operation\n",
    "The pooling operation reduces the shape of our tensor further by extracting the maximum value from each `2x2` location within our tensor.\n",
    "\n",
    "4个里面挑1个最大的留下，其他舍去，所以相当于横向舍掉一半，纵向舍掉一半，最终整个t的两维都降为原来一半"
   ]
  },
  {
   "attachments": {
    "bf-maxpoollayer.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Before：\n",
    "![bf-maxpoollayer.png](attachment:bf-maxpoollayer.png)"
   ]
  },
  {
   "attachments": {
    "af-maxpoollayer.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After：\n",
    "![af-maxpoollayer.png](attachment:af-maxpoollayer.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Convolution Layer Summary\n",
    "The shapes of the tensor input to and output from the convolutional layer is given by:\n",
    "* Input shape: [1, 1, 28, 28]\n",
    "* Output shape: [1, 6, 12, 12]\n",
    "\n",
    "  \n",
    "  \n",
    "Summary of each operation that occurs:\n",
    "1. The convolution layer convolves the input tensor using six randomly initialized `5x5` filters.\n",
    "  * This reduces the height and width dimensions by four.\n",
    "2. The relu activation function operation maps all negative values to `0`.\n",
    "  * This means that all the values in the tensor are now positive.\n",
    "3. The max pooling operation extracts the max value from each `2x2` section of the six feature maps that were created by the convolutions.\n",
    "  * This reduced the height and width dimensions by twelve."
   ]
  },
  {
   "attachments": {
    "formula1.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## CNN Output Size Formula\n",
    "Let's have a look at the formula for computing the output size of the tensor after performing convolutional and pooling operations.\n",
    "### CNN Output Size Formula (Square)\n",
    "* Suppose we have an <math>\n",
    "  <mi>n</mi>\n",
    "  <mo>&#xD7;</mo>\n",
    "  <mi>n</mi>\n",
    "</math> input.\n",
    "* Suppose we have an <math>\n",
    "  <mi>f</mi>\n",
    "  <mo>&#xD7;</mo>\n",
    "  <mi>f</mi>\n",
    "</math> filter.\n",
    "* Suppose we have a padding of $p$ and a stride of $s$.  \n",
    "\n",
    "\n",
    "The output size $O$ is given by this formula:\n",
    "![formula1.png](attachment:formula1.png)\n",
    "This value will be the height and width of the output. However, if the input or the filter **isn't a square**, this formula needs to be applied twice, once for the width and once for the height.[Non-Square link](https://deeplizard.com/learn/video/cin4YcGBh3Q)"
   ]
  },
  {
   "attachments": {
    "convlayer2.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### #3 Convolutional Layer (2)\n",
    "The second hidden convolutional layer `self.conv2`, transforms the tensor in the same was as `self.conv1` and reduces the height and width dimensions further. Before we run through these transformations, let’s check the shape of the weight tensor for `self.conv2`:\n",
    "![convlayer2.png](attachment:convlayer2.png)"
   ]
  },
  {
   "attachments": {
    "af-convlayer2.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This tensor’s shape is given by:  \n",
    "**(number of filters, number of input channels, filter height, filter width)**\n",
    "\n",
    "This time our weight tensor has **twelve filters** of height of five and width of five, but **instead of having a single input channel**, the number of channels is is coming in at **six**, which gives the filters a **depth**. This accounts for the six output channels from the first convolutional layer.因为第一个conv层中用了6个filter，所以就相当于输出6个channel，在这里我们把这个6理解为这conv2层中filter的厚度   \n",
    "`self.conv1 = nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5)` <br>The resulting **output will** have **twelve channels**.\n",
    "![af-convlayer2.png](attachment:af-convlayer2.png)"
   ]
  },
  {
   "attachments": {
    "af-relulayer2.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![af-relulayer2.png](attachment:af-relulayer2.png)"
   ]
  },
  {
   "attachments": {
    "af-maxpoollayer2.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![af-maxpoollayer2.png](attachment:af-maxpoollayer2.png)"
   ]
  },
  {
   "attachments": {
    "flatten.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The shape of the resulting **output** of `self.conv2` allows us to see why we reshape the tensor using `12*4*4` before passing the tensor to the first linear layer, `self.fc1`. \n",
    "\n",
    "As we have seen in the past, this particular reshaping is called **flattening** the tensor. The `flatten operation` puts all of the tensor’s elements into a **single dimension** output.\n",
    "![flatten.png](attachment:flatten.png)\n",
    "\n",
    "The resulting shape is `1x192`. The `1` in this case represents the **batch size**, and the `192` is the number of elements in the tensor that are now in the same dimension."
   ]
  },
  {
   "attachments": {
    "af-fc1.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### #4 #5 #6 Linear Layers\n",
    "Now, we just have a series of **linear layers** followed by non-linear activation function until we reach the output layer.<br>\n",
    "`self.fc1 = nn.Linear(in_features=12*4*4, out_features=120)`\n",
    "\n",
    "![af-fc1.png](attachment:af-fc1.png)"
   ]
  },
  {
   "attachments": {
    "af-fc2.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`self.fc2 = nn.Linear(in_features=120, out_features=60)`\n",
    "![af-fc2.png](attachment:af-fc2.png)"
   ]
  },
  {
   "attachments": {
    "af-out.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`self.out = nn.Linear(in_features=60, out_features=10)`\n",
    "![af-out.png](attachment:af-out.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([[ 0.0570,  0.0405,  0.1151,  0.0390,  0.1634, -0.0542,  0.0824,  0.0600,  0.1281, -0.0988]],\n",
      "       grad_fn=<AddmmBackward>)\n"
     ]
    }
   ],
   "source": [
    "print(output)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This table summarizes the shape changing operations and the resulting shape of each:\n",
    "\n",
    "| **Operation** | **Output Shape** |\n",
    "| --- | --- |\n",
    "| Identity function | `torch.Size([1, 1, 28, 28])` |\n",
    "| Convolution `(5 x 5)` | `torch.Size([1, 6, 24, 24])` |\n",
    "| Max pooling `(2 x 2)` | `torch.Size([1, 6, 12, 12])` |\n",
    "| Convolution `(5 x 5)` | `torch.Size([1, 12, 8, 8])` |\n",
    "| Max pooling `(2 x 2)` | `torch.Size([1, 12, 4, 4])` |\n",
    "| Flatten (reshape) | `torch.Size([1, 192])` |\n",
    "| Linear transformation | `torch.Size([1, 120])` |\n",
    "| Linear transformation | `torch.Size([1, 60])` |\n",
    "| Linear transformation | `torch.Size([1, 10])` |"
   ]
  },
  {
   "attachments": {
    "relu.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Quiz 08\n",
    "Q1:The input layer can be regarded as the identity function, i.e., the output of the layer is equal to the input of the layer.  \n",
    "A1:**True**\n",
    "\n",
    "Q2:The batch size component of a particular tensor stays constant as the tensor moves through a network's forward method.  \n",
    "A2:**True**\n",
    "\n",
    "Q3:The color channels component of a particular tensor usually stays constant as the tensor moves through a CNN's forward method.  \n",
    "A3:**False**\n",
    "\n",
    "Q4:After we move forward beyond the first convolutional layer of a CNN, we don’t think of the channels as color channels any longer. We think of them more generally as output channels.  \n",
    "A4:**True**\n",
    "\n",
    "Q5:In neural network programming, output channels of a CNN convolutional layer are also called _______________.<br>\n",
    "A5:feature maps\n",
    "\n",
    "Q6:In neural network programming, the number of output channels from a convolutional layer in a CNN is determined by the number of _______________ inside the respective layer.  \n",
    "A6:filters\n",
    "\n",
    "Q7:In neural network programming, the values inside the filters of a convolutional layer are weights of that particular layer.  \n",
    "A7:**True**\n",
    "\n",
    "Q8:In neural network programming, we often use an activation function called relu(). This function is being used below. Given this sequence of commands, what will be the output of the last line?\n",
    "```python\n",
    "> t.min().item()\n",
    "-1.1849982738494873\n",
    "\n",
    "> t = F.relu(t)\n",
    "> t.min().item()\n",
    "```\n",
    "A8:0.0\n",
    "\n",
    "Q9:In neural network programming, a call to the relu() function by any given tensor will result in any negative values inside the tensor being replaced with zeros.  \n",
    "A9:**True**\n",
    "\n",
    "Q10:We define a function $f$, for every <math>\n",
    "  <mi>x</mi>\n",
    "  <mo>&#x2208;</mo>\n",
    "  <mi>R</mi>\n",
    "</math>, to be![relu.png](attachment:relu.png)\n",
    "The function definition above is how we express the relu() function mathematically.  \n",
    "A10:**True**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
